//编写express创建文件和数据库连接文件
import express from 'express'
import bodyParser from 'body-parser'
import mysql from 'mysql2'
import cors from 'cors'
import multer from 'multer'
import path from 'path'

const db = mysql.createConnection({
  host: 'localhost',
  user: 'root',
  password: '123456',
  database: 'appbolg'
})

db.connect((err) => {
  if (err) throw err
  console.log('连接数据库成功')
})

const app = express()
app.use(cors())
app.use(bodyParser.json())

app.post('/api/add', (req, res) => {
  const article = req.body
  const query = 'INSERT INTO articles SET ?'
  db.query(query, article, (err, result) => {
    if (err) {
      console.log(err)
      return res.status(500).json({ error: '服务器错误' })
    }

    res.json(result)
  })
})

app.get('/api/get', (req, res) => {
  db.query('SELECT *FROM articles', (err, results) => {
    if (err) throw err
    return res.json(results)
  })
})

app.delete('/api/delete/:id', (req, res) => {
  db.query(
    'DELETE FROM articles WHERE id = ?',
    [req.params.id],
    (err, result) => {
      if (err) throw err
      res.json(result)
    }
  )
})

app.get('/api/search/:id', (req, res) => {
  db.query(
    'SELECT * FROM articles WHERE author_id = ?',
    [req.params.id],
    (err, result) => {
      if (err) {
        console.log(err)
        return res.status(500).json({ error: '数据库错误' })
      }
      if (result.length === 0) {
        return res.status(404).json({ error: '用户不存在' })
      }
      res.json(result)
    }
  )
})

app.post('/api/update', (req, res) => {
  // 从请求体中获取用户信息
  const { id, title, summary, content, collection } = req.body

  // 构建动态更新语句
  let updateQuery = 'UPDATE articles SET '
  let updateValues = []
  let updateFields = []

  // 检查哪个字段被发送了，只添加非空字段到更新语句
  if (title) {
    updateFields.push('title = ?')
    updateValues.push(title)
  }
  if (summary) {
    updateFields.push('summary = ?')
    updateValues.push(summary)
  }
  if (content) {
    updateFields.push('content = ?')
    updateValues.push(content)
  }
  if (collection) {
    updateFields.push('collection = ?')
    updateValues.push(collection)
  }

  // 如果没有要更新的字段，则返回错误
  if (updateFields.length === 0) {
    return res.status(400).json({ error: '没有要更新的字段' })
  }

  // 添加 WHERE 条件
  updateQuery += updateFields.join(', ') + ' WHERE id = ?'
  updateValues.push(id)

  // 执行数据库更新操作
  db.query(updateQuery, updateValues, (err, result) => {
    if (err) {
      // 如果更新过程中出现错误，记录错误并返回 500 服务器错误响应
      console.error(err)
      return res.status(500).json({ error: '数据库错误' })
    }
    if (result.affectedRows === 0) {
      // 如果没有行被更新，返回 404 资源未找到响应
      return res.status(404).json({ error: '用户不存在' })
    }
    // 如果更新成功，返回 200 OK 响应和更新后的用户数据
    res.json({
      status: 'success',
      data: { id, title, summary, content, collection }
    })
  })
})

//图片文件上传

// 设置 multer 存储引擎
const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, 'uploads/')
  },
  filename: function (req, file, cb) {
    cb(
      null,
      file.fieldname + '-' + Date.now() + path.extname(file.originalname)
    )
  }
})

const upload = multer({ storage: storage })

// 上传图片的路由
app.post('/api/upload', upload.single('file'), (req, res) => {
  const file = req.file
  if (!file) {
    return res.status(400).json({ success: false, message: 'No file uploaded' })
  }

  // 返回图片的 URL
  res.json({
    success: true,
    url: `http://localhost:3000/uploads/${file.filename}`
  })
})

// 提供静态文件服务
app.use('/uploads', express.static('uploads'))

app.listen(3000, () => console.log('Server started on http://localhost:3000'))
